
/**
 * 返回一个函数\
 * 函数内部会调用 dispatch 函数并传递相应的 action 对象
 */
function bindActionCreator(actionCreator, dispatch) {
  return (...args) => {
    // 先调用 actionCreator 函数 返回一个 action 对象
    // 再调用 dispatch 函数派发该 action 对象 修改仓库里面的状态
    dispatch(actionCreator.apply(null, args))
  }
}

/**
 * 返回一个 boundActionCreators 对象 里面的每个函数内部会自动调用 dispatch 
 * @param {*} actionCreators 里面的每一个函数都会返回一个 action 对象
 * @param {*} dispatch 基于 action 对象来修改仓库里面的状态
 * @returns 一个映射 actionCreators 的对象 里面的每个函数内部会自动调用 dispatch
 */
 function bindActionCreators(actionCreators, dispatch) {
  const boundActionCreators = {}
  for (const key in actionCreators) {
    const actionCreator = actionCreators[key] // 获取返回 action 对象的函数
    boundActionCreators[key] = bindActionCreator(actionCreator, dispatch)
  }
  return boundActionCreators
}

export default bindActionCreators
